#include <cstdio>
#include <algorithm>
using namespace std;
const int N=50050;
int p[N];
//num数组 0表示和父节点同类 1表示被父节点吃，2表示吃父节点
//所有取模前提条件都是A吃B B吃C C吃A  长度为3的环
int num[N];
int find(int x){
    if(x==p[x]){
        return x;
    }
    int fa=p[x];
    p[x]=find(p[x]);
    //一定要先递归压缩路径，再更新num！
    //第一次find的时候num[x]和num[p[x]]都是0
    //假如num[x]是1,表示被p[x]吃，而num[p[x]]是2,那么更新后num[x]就是0
    //即x吃父节点p[x]，而p[x]吃p[p[x]]，所以x和p[p[x]]同类，num[x]为0
    //同样道理，如果num[x]是2，而num[p[x]]是1，更新后num[x]也为0
    //如果num[x]和num[p[x]]同为1或者同为2,根据A吃B B吃C C吃A，取模3即可（巧妙）
    //这里一定要先保存这个fa，不能用递归更新后的p[a]
    num[x]=(num[x]+num[fa])%3;
    return p[x];
}
//真话返回true
bool join(int a,int b,int q){
    int fa = find(a);
    int fb = find(b);
    //同一个根节点
    if(fa == fb){
        //q是操作 1表示同类 2表示a吃b
        //q如果是1 那么a和b就是同类，那么num值不可能出现一个1一个2的情况
        //q如果是2 那么a吃b，那么为了使得满足三角关系，b必须吃父节点，也就是num[b]为2,num[a]为1
        //或者num[b]为0,num[a]为2,即a吃b，a吃fa/fb，b和父节点同类
        //    .....(fa/fb).....
        //  a---------------------b
        //这里q-1是因为我们定义0同类 1被吃 比题目输入少1
        if(num[b] != (num[a] + (q - 1)) % 3){
            return false;
        }
        else{
            return true;
        }
    }
    else{
        //合并
        p[fb] = fa;
        //q是1的情况，a,b同类，num[fb]为0
        //q是2的情况，a吃b，有几种合并的情况
        //第一种：a本身是根节点，b有父节点，这样a吃b，合并后其实是p[fb]=a,num[fb]要分情况，
        //如果b是被fb吃，那么a和fb就应该是同类，所以num[b]=1 num[a]=0 得到num[fb]=0
        //第二种：a有父节点，b本身是根节点，这样a b fa就成了一个三角，a吃b，所以
        //如果a被fa吃，那么b一定要吃fa，更新前num[b]是0（本身是根节点）,
        //num[a]是1 得到num[fb]也就是num[b]为2 符合b吃fa
        num[fb] = (3-num[b]+num[a]+(q-1))%3;
        printf("a%d\n",num[fb]);
        //没有关系连通，所以肯定不会矛盾
        return true;
    }
}
int main(void){
    //freopen("data.txt","r",stdin);
    int n,k;
    scanf("%d%d",&n,&k);
    for(int i=0;i<n;i++){
        p[i]=i;
    }
    int q,a,b;
    int cnt=0;
    while(k--){
        scanf("%d%d%d",&q,&a,&b);
        if(a>n || b>n ||(q==2 && a==b)){
            cnt++;
        }
        else{
            if(!join(a,b,q)){
                cnt++;
            }
        }
    }
    printf("%d\n",cnt);
    return 0;
}
